export interface Analyse {
    nameEn: string;
    nameCn: string;
    descEn: string;
    descCn: string;
    flag: string;
    langC: boolean;
    langJava: boolean;
    langDotNet: boolean;
    issueList: string[];
    url: string;
}

export const AnalyseList: Analyse[] = [
    {
        nameEn: "Annotation Reachability",
        nameCn: "注解可达性",
        descEn: "Given a pair of source and sink annotation, e.g. @PerformanceCritical and @Expensive, this checker will warn whenever some method annotated with @PerformanceCritical calls, directly or indirectly, another method annotated with @Expensive",
        descCn: "给定一对源和汇注释，例如@PerformanceCritical和@Expensive，每当某个用@PerformanceCritic注释的方法直接或间接调用另一个用@Expensitive注释的方法时，此检查器将发出警告",
        flag: "--annotation-reachability",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["CHECKERS_ALLOCATES_MEMORY", "CHECKERS_ANNOTATION_REACHABILITY_ERROR", "CHECKERS_CALLS_EXPENSIVE_METHOD", "CHECKERS_EXPENSIVE_OVERRIDES_UNANNOTATED"],
        url: "https://fbinfer.com/docs/checker-annotation-reachability",
    },
    {
        nameEn: "Biabduction",
        nameCn: "Biabduction分析",
        descEn: "This analysis deals with a range of issues, many linked to memory safety.",
        descCn: "这项分析涉及一系列问题，其中许多问题与内存安全有关。",
        flag: "--biabduction",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["BIABDUCTION_MEMORY_LEAK", "DANGLING_POINTER_DEREFERENCE", "DIVIDE_BY_ZERO", "EMPTY_VECTOR_ACCESS", "IVAR_NOT_NULL_CHECKED", "NULL_DEREFERENCE", "PARAMETER_NOT_NULL_CHECKED", "PREMATURE_NIL_TERMINATION_ARGUMENT", "RESOURCE_LEAK", "RETAIN_CYCLE"],
        url: "https://fbinfer.com/docs/checker-biabduction",
    },
    {
        nameEn: "Buffer Overrun Analysis (InferBO)",
        nameCn: "缓冲区溢出分析（InferBO）",
        descEn: "InferBO is a detector for out-of-bounds array accesses.",
        descCn: "InferBO是用于越界数组访问的检测器",
        flag: "--bufferoverrun",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["BUFFER_OVERRUN_L1", "BUFFER_OVERRUN_L2", "BUFFER_OVERRUN_L3", "BUFFER_OVERRUN_L4", "BUFFER_OVERRUN_L5", "BUFFER_OVERRUN_S2", "BUFFER_OVERRUN_U5", "CONDITION_ALWAYS_FALSE", "CONDITION_ALWAYS_TRUE", "INFERBO_ALLOC_IS_BIG", "INFERBO_ALLOC_IS_NEGATIVE", "INFERBO_ALLOC_IS_ZERO", "INFERBO_ALLOC_MAY_BE_BIG", "INFERBO_ALLOC_MAY_BE_NEGATIVE", "INTEGER_OVERFLOW_L1", "INTEGER_OVERFLOW_L2", "INTEGER_OVERFLOW_L5", "INTEGER_OVERFLOW_U5", "UNREACHABLE_CODE"],
        url: "https://fbinfer.com/docs/checker-bufferoverrun",
    },
    {
        nameEn: "Config Checks between Markers",
        nameCn: "标记之间的配置检查",
        descEn: `[EXPERIMENTAL] Collects config checks between marker start and end.
        This checker collects config checkings in some program regions determined by pairs of marker-starts and marker-ends. The set of config checking functions, marker-start functions, and marker-end functions is hardcoded and empty by default for now, so to use this checker, please modify the code directly in FbGKInteraction.ml.`,
        descCn: `[实验]收集标记开始和结束之间的配置检查。
        该检查器收集由标记开始和标记结束对确定的一些程序区域中的配置检查。配置检查函数、标记开始函数和标记结束函数的集合目前是硬编码的，默认为空，因此要使用此检查器，请直接在FbGKInteraction.ml中修改代码。`,
        flag: "--config-checks-between-markers",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["CONFIG_CHECKS_BETWEEN_MARKERS"],
        url: "https://fbinfer.com/docs/checker-config-checks-between-markers",
    },
    {
        nameEn: "Config Impact Analysis",
        nameCn: "配置影响分析",
        descEn: `[EXPERIMENTAL] Collects function that are called without config checks.
        This checker collects functions whose execution isn't gated by certain pre-defined gating functions. The set of gating functions is hardcoded and empty by default for now, so to use this checker, please modify the code directly in FbGKInteraction.ml.`,
        descCn: `[实验]收集在没有配置检查的情况下调用的函数。
        此检查器收集执行未被某些预定义选通函数选通的函数。门控功能集是硬编码的，目前默认为空，因此要使用此检查器，请直接在FbGKInteraction.ml中修改代码。`,
        flag: "--config-impact-analysis",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["CONFIG_IMPACT"],
        url: "https://fbinfer.com/docs/checker-config-impact-analysis",
    },
    {
        nameEn: "Cost: Runtime Complexity Analysis",
        nameCn: "运行时复杂性分析",
        descEn: `Computes the time complexity of functions and methods. Can be used to detect changes in runtime complexity with infer reportdiff.
        Cost analysis statically estimates an upper bound on the worst-case execution cost of a program (WCET). This page gives an overview of how the analysis works for Java code. The analyser also has limited support for C/C++ and Objective-C.`,
        descCn: `计算函数和方法的时间复杂性。可以使用推断报告差异来检测运行时复杂性的变化。
        成本分析静态地估计程序的最坏情况执行成本（WCET）的上限。本页概述了Java代码的分析工作。分析器对C/C++和Objective-C的支持也有限。`,
        flag: "--cost",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["AUTORELEASEPOOL_SIZE_COMPLEXITY_INCREASE", "AUTORELEASEPOOL_SIZE_COMPLEXITY_INCREASE_UI_THREAD", "AUTORELEASEPOOL_SIZE_UNREACHABLE_AT_EXIT", "EXECUTION_TIME_COMPLEXITY_INCREASE", "EXECUTION_TIME_COMPLEXITY_INCREASE_UI_THREAD", "EXECUTION_TIME_UNREACHABLE_AT_EXIT", "EXPENSIVE_AUTORELEASEPOOL_SIZE", "EXPENSIVE_EXECUTION_TIME", "INFINITE_AUTORELEASEPOOL_SIZE", "INFINITE_EXECUTION_TIME"],
        url: "https://fbinfer.com/docs/checker-cost",
    },
    {
        nameEn: "Eradicate",
        nameCn: "Eradicate分析",
        descEn: `Infer:Eradicate is a type checker for @Nullable annotations for Java. It is part of the Infer static analysis suite of tools. The goal is to eradicate null pointer exceptions.
        @Nullableannotations denote that a parameter, field or the return value of a method can be null. When decorating a parameter, this denotes that the parameter can legitimately be null and the method will need to deal with it. When decorating a method, this denotes the method might legitimately return null.
        Starting from @Nullable-annotated programs, the checker performs a flow sensitive analysis to propagate the nullability through assignments and calls, and flags errors for unprotected accesses to nullable values or inconsistent/missing annotations. It can also be used to add annotations to a previously un-annotated program.`,
        descCn: `Infer:Eradicate是Java的@Nullable注释的类型检查器。它是Infer静态分析工具套件的一部分。目标是消除空指针异常。
        @Nullableannotations表示参数、字段或方法的返回值可以为null。当修饰参数时，这表示参数可以合法地为null，并且方法需要处理它。当修饰方法时，这表明方法可能合法地返回null。
        从@Nullable annotated程序开始，检查器执行流敏感分析，通过赋值和调用传播可为Null性，并标记对可为Null值的无保护访问或不一致/缺少注释的错误。它还可以用于向以前未注释的程序添加注释。`,
        flag: "--eradicate",
        langC: false,
        langJava: true,
        langDotNet: true,
        issueList: ["ERADICATE_ANNOTATION_GRAPH", "ERADICATE_BAD_NESTED_CLASS_ANNOTATION", "ERADICATE_CONDITION_REDUNDANT", "ERADICATE_FIELD_NOT_INITIALIZED", "ERADICATE_FIELD_NOT_NULLABLE", "ERADICATE_FIELD_OVER_ANNOTATED", "ERADICATE_INCONSISTENT_SUBCLASS_PARAMETER_ANNOTATION", "ERADICATE_INCONSISTENT_SUBCLASS_RETURN_ANNOTATION", "ERADICATE_META_CLASS_CAN_BE_NULLSAFE", "ERADICATE_META_CLASS_IS_NULLSAFE", "ERADICATE_META_CLASS_NEEDS_IMPROVEMENT", "ERADICATE_NULLABLE_DEREFERENCE", "ERADICATE_PARAMETER_NOT_NULLABLE", "ERADICATE_REDUNDANT_NESTED_CLASS_ANNOTATION", "ERADICATE_RETURN_NOT_NULLABLE", "ERADICATE_RETURN_OVER_ANNOTATED", "ERADICATE_UNCHECKED_USAGE_IN_NULLSAFE", "ERADICATE_UNVETTED_THIRD_PARTY_IN_NULLSAFE"],
        url: "https://fbinfer.com/docs/checker-eradicate",
    },
    {
        nameEn: "Impurity",
        nameCn: "副作用分析",
        descEn: `Detects functions with potential side-effects. Same as "purity", but implemented on top of Pulse.
        This is an experimental inter-procedural analysis that detects impure functions. It is meant to be an improvement over the purity analysis with a negation on the issue types. For each function, impurity analysis keeps track of not only the impurity of the function but also some additional information such as which parameters/globals the function modifies. It models functions with no summary/model as impure. The analysis relies on Pulse summaries to determine impurity.`,
        descCn: `检测具有潜在副作用的功能。与“purity”相同，但在Pulse之上实现。
        这是一种实验性的过程间分析，用于检测不纯净的函数。这是对纯粹性分析的改进，对问题类型进行否定。对于每个函数，杂质分析不仅跟踪函数的杂质，还跟踪一些附加信息，例如函数修改的参数/全局。它将没有摘要/模型的功能建模为不纯。分析依赖于脉冲总结来确定杂质。`,
        flag: "--impurity",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["IMPURE_FUNCTION", "MODIFIES_IMMUTABLE"],
        url: "https://fbinfer.com/docs/checker-impurity",
    },
    {
        nameEn: "Inefficient keySet Iterator",
        nameCn: "低效的键值集访问",
        descEn: "Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly.",
        descCn: "检查迭代器的低效使用，迭代器对键进行迭代，然后查找它们的值，而不是直接对键值对进行迭代。",
        flag: "--inefficient-keyset-iterator",
        langC: false,
        langJava: true,
        langDotNet: true,
        issueList: ["INEFFICIENT_KEYSET_ITERATOR"],
        url: "https://fbinfer.com/docs/checker-inefficient-keyset-iterator",
    },
    {
        nameEn: `Litho "Required Props"`,
        nameCn: "Litho必要属性分析",
        descEn: `Checks that all non-optional @Props have been specified when constructing Litho components.
        This analysis checks that all non-optional @Prop's have been specified when constructing Litho components. This is a Litho specific checker.`,
        descCn: `在构造Litho组件时，检查是否已指定所有非可选@Props。
        此分析检查在构造Litho组件时是否指定了所有非可选的@Props。这是一个特定的检查器。`,
        flag: "--litho-required-props",
        langC: false,
        langJava: true,
        langDotNet: true,
        issueList: ["MISSING_REQUIRED_PROP"],
        url: "https://fbinfer.com/docs/checker-litho-required-props",
    },
    {
        nameEn: "Liveness",
        nameCn: "存活分析",
        descEn: "Detection of dead stores and unused variables.",
        descCn: "检测失效存储和未使用的变量。",
        flag: "--liveness",
        langC: true,
        langJava: false,
        langDotNet: false,
        issueList: ["DEAD_STORE"],
        url: "https://fbinfer.com/docs/checker-liveness",
    },
    {
        nameEn: "Loop Hoisting",
        nameCn: "循环效率分析",
        descEn: `Detect opportunities to hoist function calls that are invariant outside of loop bodies for efficiency.
        This checker detects opportunities to hoist function calls that are invariant to outside of loop bodies. The hoisting analysis relies on purity analysis to determine whether a function is pure or not.`,
        descCn: `检测提升函数调用的机会，这些函数调用在循环体之外是不变的，以提高效率。
        此检查器检测提升对循环体外部不变的函数调用的机会。提升分析依赖于纯度分析来确定函数是否是纯的。`,
        flag: "--loop-hoisting",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["EXPENSIVE_LOOP_INVARIANT_CALL", "INVARIANT_CALL"],
        url: "https://fbinfer.com/docs/checker-loop-hoisting",
    },
    {
        nameEn: "Pulse",
        nameCn: "Pulse分析",
        descEn: `Memory and lifetime analysis.
        Pulse is an interprocedural memory safety analysis. Pulse can detect, for instance, Null dereferences in Java. Errors are only reported when all conditions on the erroneous path are true regardless of input. Pulse should gradually replace the original biabduction analysis of Infer. `,
        descCn: `内存和生命周期分析。
        Pulse是一种过程间内存安全性分析。例如，Pulse可以检测Java中的空引用。只有当错误路径上的所有条件都为真时，才报告错误，而不考虑输入。脉冲应该逐渐取代原来的推断偏误分析。`,
        flag: "--pulse",
        langC: true,
        langJava: true,
        langDotNet: false,
        issueList: ["CONSTANT_ADDRESS_DEREFERENCE", "MEMORY_LEAK", "NIL_MESSAGING_TO_NON_POD", "NULLPTR_DEREFERENCE", "OPTIONAL_EMPTY_ACCESS", "PULSE_UNINITIALIZED_VALUE", "STACK_VARIABLE_ADDRESS_ESCAPE", "USE_AFTER_DELETE", "USE_AFTER_FREE", "USE_AFTER_LIFETIME", "VECTOR_INVALIDATION"],
        url: "https://fbinfer.com/docs/checker-pulse",
    },
    {
        nameEn: "Purity",
        nameCn: "Purity分析",
        descEn: `Detects pure (side-effect-free) functions. A different implementation of "impurity".
        This is an experimental inter-procedural analysis that detects pure (side-effect free) functions. For each function, purity analysis keeps track of not only the purity of the function but also some additional information such as whether the function modifies a global variable or which of the parameters are modified. It models functions with no summary/model as modifying the global state (hence impure).`,
        descCn: `检测纯（无副作用）功能。“杂质”的另一种实现方式。
        这是一个实验性的过程间分析，用于检测纯（无副作用）函数。对于每个函数，纯度分析不仅跟踪函数的纯度，还跟踪一些附加信息，例如函数是否修改了全局变量或修改了哪些参数。它将没有摘要/模型的功能建模为修改全局状态（因此不纯净）。`,
        flag: "--purity",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["PURE_FUNCTION"],
        url: "https://fbinfer.com/docs/checker-purity",
    },
    {
        nameEn: "Quandary",
        nameCn: "Quandary分析",
        descEn: `The Quandary taint analysis detects flows of values between sources and sinks, except if the value went through a "sanitizer". In addition to some defaults, users can specify their own sources, sinks, and sanitizers functions.
        Quandary is a static taint analyzer that identifies a variety of unsafe information flows. It has a small list of built-in sources and sinks, and you can define custom sources and sinks in your .inferconfig file (see example here).`,
        descCn: `Quantary污染分析检测源和汇之间的值流，除非值经过“消毒器”。除了一些默认值外，用户还可以指定自己的源、汇和消毒程序功能。
        Quantary是一个静态污点分析器，用于识别各种不安全的信息流。它有一个内置源和接收器的小列表，您可以在.inderconfig文件中定义自定义源和接收器（请参阅此处的示例）。`,
        flag: "--quandary",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["CREATE_INTENT_FROM_URI", "CROSS_SITE_SCRIPTING", "EXPOSED_INSECURE_INTENT_HANDLING", "INSECURE_INTENT_HANDLING", "JAVASCRIPT_INJECTION", "LOGGING_PRIVATE_DATA", "QUANDARY_TAINT_ERROR", "SHELL_INJECTION", "SHELL_INJECTION_RISK", "SQL_INJECTION", "SQL_INJECTION_RISK", "UNTRUSTED_BUFFER_ACCESS", "UNTRUSTED_DESERIALIZATION", "UNTRUSTED_DESERIALIZATION_RISK", "UNTRUSTED_ENVIRONMENT_CHANGE_RISK", "UNTRUSTED_FILE", "UNTRUSTED_FILE_RISK", "UNTRUSTED_HEAP_ALLOCATION", "UNTRUSTED_INTENT_CREATION", "UNTRUSTED_URL_RISK", "UNTRUSTED_VARIABLE_LENGTH_ARRAY", "USER_CONTROLLED_SQL_RISK",],
        url: "https://fbinfer.com/docs/checker-quandary",
    },
    {
        nameEn: "RacerD",
        nameCn: "数据竞争分析",
        descEn: `Thread safety analysis.
        RacerD finds data races in your C++/Objective C and Java code. `,
        descCn: `线程安全性分析。
        RacerD在您的C++/Objective C和Java代码中查找数据竞赛。`,
        flag: "--racerd",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["GUARDEDBY_VIOLATION", "GUARDEDBY_VIOLATION_NULLSAFE", "INTERFACE_NOT_THREAD_SAFE", "LOCK_CONSISTENCY_VIOLATION", "THREAD_SAFETY_VIOLATION", "THREAD_SAFETY_VIOLATION_NULLSAFE",],
        url: "https://fbinfer.com/docs/checker-racerd",
    },
    {
        nameEn: "Resource Leak checker for .NET",
        nameCn: ".NET资源泄露检测",
        descEn: `"resource leak" checker for .NET.`,
        descCn: ".NET资源泄露检测",
        flag: "--dotnet-resource-leak",
        langC: false,
        langJava: false,
        langDotNet: true,
        issueList: ["DOTNET_RESOURCE_LEAK"],
        url: "https://fbinfer.com/docs/checker-dotnet-resource-leak",
    },
    {
        nameEn: "Static Initialization Order Fiasco",
        nameCn: "静态数据初始化顺序检查",
        descEn: "Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors.",
        descCn: "在C++中捕获静态初始化顺序Fiascos，这可能会导致微妙的、依赖于编译器版本的错误。",
        flag: "--siof",
        langC: true,
        langJava: false,
        langDotNet: false,
        issueList: ["STATIC_INITIALIZATION_ORDER_FIASCO"],
        url: "https://fbinfer.com/docs/checker-siof",
    },
    {
        nameEn: "Self in Block",
        nameCn: "Self检查",
        descEn: "An Objective-C-specific analysis to detect when a block captures self.",
        descCn: "一种特定于Objective-C的分析，用于检测区块何时捕获Self",
        flag: "--self-in-block",
        langC: true,
        langJava: false,
        langDotNet: false,
        issueList: ["CAPTURED_STRONG_SELF", "MIXED_SELF_WEAKSELF", "MULTIPLE_WEAKSELF", "STRONG_SELF_NOT_CHECKED", "WEAK_SELF_IN_NO_ESCAPE_BLOCK"],
        url: "https://fbinfer.com/docs/checker-self-in-block",
    },
    {
        nameEn: "Starvation",
        nameCn: "程序僵死检查",
        descEn: "Detect various kinds of situations when no progress is being made because of concurrency errors.",
        descCn: "检测由于并发错误而没有响应的各种情况。",
        flag: "--starvation",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["ARBITRARY_CODE_EXECUTION_UNDER_LOCK", "DEADLOCK", "IPC_ON_UI_THREAD", "LOCKLESS_VIOLATION", "STARVATION", "STRICT_MODE_VIOLATION"],
        url: "https://fbinfer.com/docs/checker-starvation",
    },
    {
        nameEn: "Topl",
        nameCn: "Topl分析",
        descEn: "Detect errors based on user-provided state machines describing temporal properties over multiple objects.",
        descCn: "根据用户提供的状态机检测错误，该状态机描述了多个对象的时态属性。",
        flag: "--topl",
        langC: true,
        langJava: true,
        langDotNet: true,
        issueList: ["TOPL_ERROR"],
        url: "https://fbinfer.com/docs/checker-topl",
    },
    {
        nameEn: "Uninitialized Value",
        nameCn: "未初始化值检查",
        descEn: "Warns when values are used before having been initialized.",
        descCn: "在初始化之前使用值时发出警告。",
        flag: "--uninit",
        langC: true,
        langJava: false,
        langDotNet: false,
        issueList: ["UNINITIALIZED_VALUE"],
        url: "https://fbinfer.com/docs/checker-uninit",
    },
];